package com.guo.write;

import com.alibaba.excel.EasyExcel;
import com.guo.TestFileUtil;
import com.guo.easy.DemoStyleData;
import com.guo.easy.FillData;
import com.guo.easy.WriteData;
import org.junit.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author gonghuaiguo
 */
public class WriteTest {

    public static final String fileName = TestFileUtil.getPath()+"simpleWrite"+System.currentTimeMillis()+".xlsx";

    public static final String templateFileName =  TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx";

    @Test
    public void simpleWrite() {
        // 注意 simpleWrite在数据量不大的情况下可以使用（5000以内，具体也要看实际情况），数据量大参照 重复多次写入

        // 写法1 JDK8+
        // since: 3.0.0-beta1
        String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, WriteData.class)
                .sheet("模板")
                .doWrite(() -> {
                    // 分页查询数据
                    return data();
                });

        // 写法2
//        fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
//        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

        // 写法3
//        fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写
//        try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
//            WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
//            excelWriter.write(data(), writeSheet);
//        }
    }
    private List<WriteData> data(){
        List<WriteData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            WriteData writeData = new WriteData();
            writeData.setString("字符串"+i);
            writeData.setDate(new Date());
            writeData.setDoubleData(2.67);
            writeData.setIgnore("中文");
            list.add(writeData);
        }
        return list;
    }

    @Test
    public void excludeOrIncludeWrite(){

    }

    @Test
    public void annotationStyleWrite(){
        EasyExcel.write(fileName, DemoStyleData.class).sheet("模版").doWrite(data());
    }

    @Test
    public void simpleFill(){

        String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";
        FillData fillData = new FillData();
        fillData.setName("张三");
        fillData.setNumber(5.2);
        EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);
    }

}



